package doit20.sparksql

import org.apache.spark.sql.SparkSession

/**
 * @author 涛哥
 * @nick_name "deep as the sea"
 * @contact qq:657270652 wx:doit_edu
 * @site www.doitedu.cn
 * @date 2021-04-10
 * @desc 在dataframe直接调用dsl风格api来实现数据运算
 */
object Demo10 {
  def main(args: Array[String]): Unit = {

    val spark = SparkSession.builder()
      .appName("dsl风格api演示")
      .master("local")
      .enableHiveSupport()
      .getOrCreate()

    // 读命名空间中的表
    val frame = spark.read.table("default.t")
    // spark.sql(" select * from t where id>1000 ")

    // DSL风格api，就是sql中的关键字都对应成了api方法
    // R 语言中最先搞这种DSL风格api
    frame.where("id>1000")

    // Column是sparksql中对表的列的封装对象
    frame.where(frame("id") > (1000))

    import spark.implicits._
    // $"id" 等价于 frame("id")，得到的是一个Column对象
    frame.where($"id" > 1000)

    // 'id  等价于 frame("id")，得到的是一个Column对象
    frame.where('id > 1000)

    // col方法，也是取到一个Column对象
    import org.apache.spark.sql.functions._
    frame.where(col("id") > 1000).show(100,false)



    spark.close()
  }

}
